package cn.seaboot.admin.quartz.core;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 定时任务回调
 * <p>
 * 将回调函数添加到 context 中，当计划任务执行之后，直接触发回调函数。
 * <p>
 * 对于单一项目，这个设计是非常实用的，代码只会形成单向依赖，可以很优雅地调用各个 Service。
 *
 * @author Mr.css
 * @version 2024-12-26 17:27
 */
@DisallowConcurrentExecution
public class CallableJob implements Job {

    /**
     * 回调函数的名称
     */
    public static final String CALL_KEY = "$ref";

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        Runnable runnable = (Runnable) context.getJobDetail().getJobDataMap().get(CALL_KEY);
        runnable.run();
    }
}
